In [13]:
import nltk.data
from bs4 import BeautifulSoup
import operator
from nltk.probability import *
from nltk.corpus import stopwords
from nltk.tokenize import TreebankWordTokenizer
import string
import re

# Idea: get the most common words (done), represent which deputees have these words in common
# or which deputees talk the most of certain topics

In [16]:
# a set containing the deputees' names
deputes_list = set()

# this will contain the deputees' speeches (the key being their name)
deputes_paroles = {}

# this will contain their titles (for exemple: Conseiller d'Etat)
deputes_titres = {}

# We compile the regular expression used to remove the name and title from the beginning of each speech
p = re.compile("\.")

def open_memorial(filepath):
    f = open(filepath, 'r')
    html = f.read()
    doc = BeautifulSoup(html, 'html.parser')

    memos = doc.select('.txtMemo p')

    for memo in memos:
        depute = memo.select('a.style_pdg_gras')
        if depute:
            nom_depute = depute[0].string
            deputes_list.add(nom_depute)
            if not nom_depute in deputes_paroles.keys():
                deputes_paroles[nom_depute] = []
            speech = memo.get_text()
            # We remove the name and title: "M. Nom Député (Parti). Bla bla blaaa"
            startpos = re.search(p, speech[3:]).start()
            deputes_paroles[nom_depute].append(speech[startpos+5:])
            if not nom_depute in deputes_titres.keys():
                deputes_titres[nom_depute] = []
                deputes_titres[nom_depute].append(speech[:startpos+4])
            else:
                if speech[:startpos+4] not in deputes_titres[nom_depute]:
                    deputes_titres[nom_depute].append(speech[:startpos+4])

for o in range(0, 19): # year 2016
    open_memorial('memoriaux/memoriaux' + str(o) + '.html')

print("Députés enregistrés:", len(deputes_list))
print("Speeches enregistrés:", sum([len(deputes_paroles[i]) for i in deputes_paroles]))


Députés enregistrés: 96
Speeches enregistrés: 734

In [17]:
# tokenizer = nltk.data.load('tokenizers/punkt/PY3/french.pickle')
tokenizer = TreebankWordTokenizer()
french_stopwords = set(stopwords.words('french'))
french_stopwords.update(['les', 'alors', '(', ')', ',', '-', '.', 'M', 'M.', 'Mme', 'a', 'être'])

remove_punctuation_map = dict((ord(char), None) for char in string.punctuation if char not in ["'"])

def analyze_text(text):
    tokens = tokenizer.tokenize(text) 
    ntokens = [token for token in tokens if token.lower() not in french_stopwords]
    ntokens = [token.translate(remove_punctuation_map) for token in ntokens]
    ntokens = [token for token in ntokens if token != '']
    
    fdist = FreqDist(ntokens)
    sorted_x = sorted(fdist.items(), key=operator.itemgetter(1), reverse=True)
    return sorted_x

# print(analyze_text(deputes_paroles['M. Patrick Lussi'][1])[:10]) # use this line to see a specific speech

# This prints our results before we do the json export:

for key in deputes_paroles.keys():
    blob_text = str.join(' ', deputes_paroles[key])
    nb_speeches = len(deputes_paroles[key])
    if nb_speeches > 2:
        print(str.join('|', deputes_titres[key]), "("+str(nb_speeches)+" prises de parole):")
        result = analyze_text(blob_text)
        
        for word, count in result[:15]:
            if count > 2:
                print(str(count) + "\t" + word)
        print("\n")


M. Romain de Sainte Marie (S).|M. Romain de Sainte Marie (S), rapporteur de deuxième minorité. (15 prises de parole):
23	loi
23	projet
18	plus
17	cette
14	bien
13	Genève
12	canton
12	commission
11	motion
11	qu'il
10	si
10	très
9	matière
8	M
8	part


Mme Emilie Flamand-Lew (Ve).|Mme Emilie Flamand-Lew (Ve), rapporteuse. (8 prises de parole):
11	cette
8	loi
8	police
7	députés
6	Messieurs
6	Mesdames
6	comme
5	ils
5	Monsieur
5	l'annuité
5	président
5	c'est
5	victimes
5	aussi
5	plus


M. Stéphane Florey (UDC). (19 prises de parole):
13	président
13	Merci
13	cette
10	si
10	Conseil
10	Monsieur
9	bien
9	pétition
9	c'est
8	groupe
8	cela
7	d'Etat
7	rapport
7	C'est
7	commission


M. Mathias Buschbeck (Ve).|M. Mathias Buschbeck (Ve), rapporteur de première minorité ad interim.|M. Mathias Buschbeck (Ve), rapporteur de première minorité. (11 prises de parole):
16	cette
14	projet
13	loi
11	si
11	traversée
10	comme
10	plus
8	compromis
8	c'est
8	lac
7	mobilité
7	bien
7	non
7	tout
7	fait


M. François  Longchamp, président du Conseil d'Etat. (3 prises de parole):
13	loi
9	Conseil
8	C'est
7	Genève
6	dernier
6	répartition
6	c'est
6	cette
6	tâches
5	d'Etat
5	comme
5	notamment
5	mois
5	quelques
5	projet


M. Michel Baud (UDC). (4 prises de parole):
7	caméras
4	c'est
4	demande
4	Merci
3	prix
3	policier
3	faire
3	président
3	cette
3	Monsieur
3	aussi


Mme Salika Wenger (EAG). (12 prises de parole):
15	c'est
12	faire
12	plus
12	tout
8	peu
8	collègues
7	dire
7	cette
7	commission
7	Commentaires
7	Chers
7	n'est
7	travail
7	parce
6	d'une


M. Boris Calame (Ve), rapporteur de majorité.|M. Boris Calame (Ve). (7 prises de parole):
11	loi
9	commission
8	Conseil
7	Monsieur
7	président
7	plus
7	projet
6	développement
5	d'une
5	durable
5	faut
5	Verts
5	cette
5	notamment
5	tout


Mme Isabelle Brunier (S).|Mme Isabelle Brunier (S), rapporteuse. (6 prises de parole):
8	bien
6	effet
5	si
5	socialiste
5	problème
5	c'est
5	commission
4	renvoi
4	Natura
4	d'Etat
4	Conseil
4	parti
4	Pro
4	cette
4	deux


M. Thierry Cerutti (MCG).|M. Thierry Cerutti (MCG), rapporteur de majorité.|M. Thierry Cerutti (MCG), rapporteur de deuxième minorité. (9 prises de parole):
10	commission
9	députés
9	président
6	bien
5	Messieurs
5	Mesdames
5	sein
5	jour
5	tout
5	majorité
4	faire
4	propositions
4	qu'on
4	hémicycle
4	tous


Mme Lydia Schneider Hausser (S). (16 prises de parole):
12	président
11	cette
10	Mesdames
10	plus
10	Messieurs
10	si
10	Monsieur
10	prestations
10	députés
9	qu'il
8	comme
8	aussi
8	Merci
8	tout
7	faire


Mme Sarah Klopmann (Ve).|Mme Sarah Klopmann (Ve), rapporteuse.|Mme Sarah Klopmann (Ve), rapporteuse de minorité. (20 prises de parole):
14	président
13	cette
13	Merci
12	Monsieur
12	aussi
11	tout
11	cela
8	très
8	Verts
8	c'est
8	donc
8	déjà
7	faire
7	qu'il
6	Conseil


M. Eric Leyvraz (UDC).|M. Eric Leyvraz (UDC), rapporteur. (7 prises de parole):
11	loi
8	cela
8	d'Etat
7	plus
6	comptes
6	quand
6	Conseil
5	bien
5	Cour
5	Monsieur
5	président
5	cette
4	canton
4	nature
4	conseiller


M. François Lance (PDC).|M. François Lance (PDC), rapporteur de majorité. (5 prises de parole):
5	leurs
5	plus
5	entre
4	d'un
4	loi
4	dimanche
4	projet
4	l'ACG
3	Messieurs
3	également
3	députés
3	cette
3	rappeler
3	demande
3	consommateurs


M. Jean-François Girardet (MCG). (5 prises de parole):
11	Conseil
9	d'Etat
9	cette
7	bien
7	communes
7	qu'il
6	pétition
6	loi
6	comme
5	premier
5	projet
4	Messieurs
4	Mesdames
4	députés
4	aussi


M. Christo Ivanov (UDC), rapporteur de minorité.|M. Christo Ivanov (UDC). (10 prises de parole):
9	effet
8	Monsieur
8	président
8	projet
7	Conseil
7	travaux
7	cette
7	demande
7	plus
7	commission
6	loi
6	groupe
6	gestion
6	tout
5	UDC


Mme Caroline Marti (S). (3 prises de parole):
5	rive
5	gauche
4	lac
4	plus
3	Genève
3	président
3	cette
3	zone
3	n'est
3	villas
3	fédéral


M. Bertrand Buchs (PDC), rapporteur de majorité.|M. Bertrand Buchs (PDC). (30 prises de parole):
31	loi
26	Conseil
22	projet
21	c'est
20	commission
20	d'Etat
18	qu'on
17	bien
17	cette
16	comme
15	très
15	remercie
15	fait
14	qu'il
14	va


M. Luc Barthassat, conseiller d'Etat. (8 prises de parole):
12	comme
11	c'est
11	tout
9	Messieurs
9	Mesdames
9	députés
8	bien
7	loi
7	M
6	vrai
6	qu'il
6	peu
6	aussi
6	projet
5	fois


M. Vincent Maitre (PDC). (6 prises de parole):
8	tout
7	loi
5	c'est
5	projet
4	droit
4	vidéosurveillance
4	police
4	Monsieur
4	président
4	n'est
4	problèmes
3	devait
3	Genève
3	d'autres
3	précisément


M. Marc Falquet (UDC).|M. Marc Falquet (UDC), rapporteur de majorité. (14 prises de parole):
14	c'est
14	plus
12	faut
11	personnes
10	n'est
9	faire
9	000
8	ça
8	président
7	gens
7	quand
7	parce
6	qu'on
6	Monsieur
6	général


M. Jean-Charles Rielle (S). (4 prises de parole):
10	patients
6	décisions
4	éclairage
4	c'est
4	prises
3	quelqu'un
3	compétent
3	avoir
3	président
3	Monsieur
3	d'un
3	parole
3	représentant
3	fait
3	cette


M. Yvan Zweifel (PLR). (4 prises de parole):
5	Genève
5	question
5	millions
4	Monsieur
4	éthique
4	s'est
4	bouclier
4	fiscal
4	évidemment
4	non
4	estce
3	s'agit
3	certains
3	passé
3	canton


M. Olivier Cerutti (PDC). (6 prises de parole):
7	Messieurs
7	Mesdames
6	tout
5	cette
5	l'on
4	c'est
4	croissance
4	où
4	parti
4	travail
3	importance
3	quand
3	quartier
3	tous
3	tant


M. Mauro Poggia, conseiller d'Etat. (15 prises de parole):
16	faire
14	Conseil
14	Messieurs
14	Mesdames
14	députés
14	cette
13	loi
13	d'Etat
12	comme
12	qu'il
10	Genève
10	plus
9	si
9	évidemment
8	mois


M. Pierre Conne (PLR), rapporteur de minorité.|M. Pierre Conne (PLR).|M. Pierre Conne (PLR), rapporteur ad interim.|M. Pierre Conne (PLR), rapporteur de première minorité. (11 prises de parole):
25	commission
15	cette
12	loi
12	projet
10	santé
9	motion
7	renvoi
6	si
6	comme
5	demande
5	milieu
5	président
5	minorité
5	tout
5	aujourd'hui


M. Bernhard Riedweg (UDC). (10 prises de parole):
12	traversée
11	projet
10	lac
10	places
9	loi
9	plus
9	canton
8	000
8	stationnement
5	population
5	très
5	d'un
5	car
4	leurs
4	moins


Mme Danièle Magnin (MCG), rapporteuse de majorité.|Mme Danièle Magnin (MCG). (7 prises de parole):
7	plus
6	c'est
5	HUG
4	Genève
4	population
4	toute
4	Monsieur
4	président
4	notamment
4	non
4	fait
3	n'y
3	gens
3	dire
3	soins


Mme Marie-Thérèse Engelberts (HP). (7 prises de parole):
6	c'est
6	n'est
5	faire
5	d'une
5	aussi
5	très
5	peu
5	président
4	si
4	quand
4	peut
4	comme
4	Monsieur
4	cette
4	là


Mme Magali Orsini (EAG), rapporteuse de première minorité.|Mme Magali Orsini (EAG). (14 prises de parole):
10	président
9	Monsieur
8	Merci
7	bien
6	comptes
6	tout
5	fait
4	qu'elle
4	000
4	dit
4	F
4	l'Etat
3	réviseur
3	si
3	J'accepte


M. Pierre Vanek (EAG).|M. Pierre Vanek (EAG), rapporteur de deuxième minorité. (16 prises de parole):
20	cette
19	qu'il
17	dit
14	plus
13	comme
12	président
12	projet
11	loi
11	Monsieur
10	c'est
8	rapport
8	bien
8	où
7	Mesdames
7	faut


M. Murat Julian Alder (PLR), rapporteur de majorité.|M. Murat Julian Alder (PLR). (7 prises de parole):
11	projet
10	loi
8	police
8	commission
7	faire
7	président
6	député
6	formation
6	c'est
6	plus
5	d'administration
5	l'arme
5	Monsieur
5	cette
5	fait


M. Frédéric Hohl (PLR), rapporteur de majorité.|M. Frédéric Hohl (PLR). (3 prises de parole):
7	Messieurs
7	Mesdames
5	Genève
4	bien
4	Comédie
4	c'est
4	projet
3	question
3	années
3	C'est
3	parlons
3	aujourd'hui
3	durant
3	F


Mme Nicole Valiquer Grecuccio (S).|Mme Nicole Valiquer Grecuccio (S), rapporteuse de majorité.|Mme Nicole Valiquer Grecuccio (S), rapporteuse de première minorité. (7 prises de parole):
13	projet
8	bien
7	fonction
7	tout
7	publique
6	dire
5	peut
5	Conseil
5	canton
5	cette
4	Genève
4	si
4	loi
4	qu'il
4	l'intérêt


Mme Christina Meissner (UDC), rapporteuse de première minorité.|Mme Christina Meissner (UDC). (8 prises de parole):
9	Monsieur
8	président
6	loi
6	concept
6	Merci
6	fait
5	qu'on
5	qu'il
5	Conseil
5	cette
5	cet
5	donc
4	d'Etat
4	l'environnement
4	choses


M. Alberto Velasco (S), rapporteur de minorité.|M. Alberto Velasco (S). (7 prises de parole):
9	Monsieur
8	Genève
8	c'est
8	président
7	dispositions
6	beaucoup
6	tout
5	communes
5	C'est
5	qu'il
5	ça
5	Ville
4	rapporteur
4	cela
4	parce


M. Serge Hiltpold (PLR).|M. Serge Hiltpold (PLR), rapporteur de majorité ad interim. (8 prises de parole):
10	plus
8	Messieurs
8	Mesdames
8	députés
8	tout
7	travail
6	notamment
5	l'emploi
5	qu'il
5	monde
5	faut
5	Monsieur
5	débat
5	C'est
5	d'abord


M. Jean-Marc Guinchard (PDC), rapporteur de majorité.|M. Jean-Marc Guinchard (PDC). (3 prises de parole):
4	travail
3	Messieurs
3	chers
3	motion
3	Mesdames
3	collègues


M. Daniel Zaugg (PLR). (5 prises de parole):
5	juste
5	Genève
5	places
4	Monsieur
4	c'est
4	qu'on
4	voitures
4	centre
4	compensation
4	peut
3	faire
3	M
3	trafic
3	km
3	stationnement


M. Christian Zaugg (EAG).|M. Christian Zaugg (EAG), rapporteur de première minorité. (6 prises de parole):
7	lac
5	Monsieur
5	président
5	Pointe
5	Bise
4	modules
4	cette
4	agents
4	comme
4	dit
4	l'ont
3	Messieurs
3	si
3	Léman
3	certain


Mme Jocelyne Haller (EAG), rapporteuse de minorité.|Mme Jocelyne Haller (EAG).|Mme Jocelyne Haller (EAG), rapporteuse de première minorité. (15 prises de parole):
17	cette
13	n'est
12	tout
11	qu'on
11	loi
11	Messieurs
11	Mesdames
10	qu'il
9	députés
9	prestations
8	dit
8	aussi
7	sociale
7	projet
7	c'est


M. François Lefort (Ve).|M. François Lefort (Ve), rapporteur.|M. François Lefort (Ve), rapporteur de minorité. (17 prises de parole):
22	projet
16	cette
15	Conseil
13	Mesdames
13	Messieurs
13	commission
12	qu'il
12	députés
10	peu
10	d'Etat
9	M
9	loi
9	donc
9	bien
9	c'est


M. André Python (MCG). (4 prises de parole):
5	commission
4	groupe
4	renvoi
3	MCG
3	remercie
3	donc


M. Jean Romain (PLR).|M. Jean Romain (PLR), rapporteur de majorité. (5 prises de parole):
8	animaux
7	c'est
5	bien
5	pétition
5	cette
4	parle
4	qu'il
3	vit
3	droits
3	faire
3	humain
3	qu'on
3	cet
3	M
3	aussi


M. Gabriel Barrillier (PLR).|M. Gabriel Barrillier (PLR), rapporteur de minorité.|M. Gabriel Barrillier (PLR), rapporteur de majorité. (10 prises de parole):
9	tout
7	Conseil
7	Monsieur
7	président
7	collègues
6	loi
6	cette
6	n'est
5	faire
5	d'Etat
5	l'environnement
5	pouvoirs
5	Chers
5	Merci
4	l'agriculture


M. Guy Mettan (PDC).|M. Guy Mettan (PDC), rapporteur de minorité.|M. Guy Mettan (PDC), rapporteur de deuxième minorité. (6 prises de parole):
10	tout
7	cette
6	pétition
6	M
5	cela
5	comme
5	fait
5	Conseil
4	problème
4	cas
3	juste
3	n'y
3	chantiers
3	place
3	demandent


M. Raymond Wicky (PLR). (10 prises de parole):
14	tout
10	quand
10	cette
10	collègues
8	chers
6	Messieurs
6	qu'il
6	Mesdames
6	Conseil
6	Monsieur
6	président
5	bien
5	pétition
5	qu'on
5	encore


M. Thomas Bläsi (UDC). (4 prises de parole):
4	très
4	tout
4	charge
3	Messieurs
3	d'Etat


Mme Sophie Forster Carbonnier (Ve). (10 prises de parole):
11	cette
9	Conseil
9	commission
8	d'Etat
7	Verts
6	Messieurs
6	Mesdames
6	contrôle
5	enfants
5	d'une
5	Monsieur
5	députés
5	président
5	gestion
5	cela


M. Cyril Mizrahi (S).|M. Cyril Mizrahi (S), rapporteur de deuxième minorité.|M. Cyril Mizrahi (S), rapporteur de troisième minorité. (7 prises de parole):
9	Messieurs
9	Mesdames
9	cela
9	collègues
8	F
8	loi
8	projet
7	qu'on
7	chers
6	qu'il
6	tout
5	s'agit
5	deux
5	dire
5	d'administration


M. Jean-Luc Forni (PDC), rapporteur de majorité.|M. Jean-Luc Forni (PDC). (11 prises de parole):
15	loi
11	prestations
10	général
10	projet
9	l'a
9	sociale
9	cette
9	plus
8	nombre
8	conseil
7	d'administration
7	qu'il
7	Conseil
7	complémentaires
7	commission


M. Roger Deneys (S).|M. Roger Deneys (S), rapporteur de deuxième minorité.|M. Roger Deneys (S), rapporteur de majorité.|M. Roger Deneys (S), rapporteur de minorité. (10 prises de parole):
17	députés
15	Messieurs
15	Mesdames
13	c'est
8	Conseil
8	n'est
8	sans
8	bien
8	si
8	d'une
8	cette
7	président
7	plus
7	année
7	travail


Mme Geneviève Arnold (PDC).|Mme Geneviève Arnold (PDC), rapporteuse de majorité. (8 prises de parole):
12	bien
12	projet
10	loi
10	donc
9	travail
8	Messieurs
8	Mesdames
8	communes
7	développement
7	PDC
7	d'Etat
7	aussi
7	députés
6	services
6	cette


M. Eric Stauffer (MCG).|M. Eric Stauffer (MCG), rapporteur de majorité. (17 prises de parole):
18	Monsieur
15	MCG
15	président
11	Genève
10	Messieurs
10	Mesdames
10	comme
10	tout
10	projet
8	bien
8	deux
8	lac
8	Merci
8	traversée
7	qu'il


M. Patrick Saudan (PLR). (3 prises de parole):
13	commission
7	motions
6	loi
6	projet
5	Conseil
4	Messieurs
4	plénière
4	députés
4	propositions
4	Mesdames
4	faut
3	renvoyer
3	si
3	peut
3	qu'il


M. François Baertschi (MCG), rapporteur de minorité.|M. François Baertschi (MCG).|M. François Baertschi (MCG), rapporteur de majorité.|M. François Baertschi (MCG), rapporteur de majorité ad interim. (34 prises de parole):
37	c'est
32	qu'il
30	tout
24	plus
24	loi
23	cette
22	C'est
21	Genève
19	faut
19	fait
18	cela
17	certain
17	parce
16	manière
16	donc


M. Cyril Aellen (PLR).|M. Cyril Aellen (PLR), rapporteur de minorité. (6 prises de parole):
10	PLR
7	groupe
5	Genève
5	loi
5	canton
5	projet
4	faire
4	cette
4	également
4	ceux
4	commission
3	finances
3	grâce
3	répartition
3	Comédie


M. Christophe Aumeunier (PLR), rapporteur.|M. Christophe Aumeunier (PLR). (4 prises de parole):
6	ans
5	zone
4	l'ensemble
4	territoire
4	fait
3	Monsieur
3	cinq
3	zones
3	respect
3	président
3	loi
3	développement
3	d'aménagement
3	directeur
3	lac


Mme Nathalie Fontanet (PLR).|Mme Nathalie Fontanet (PLR), rapporteuse de majorité. (13 prises de parole):
21	président
17	Monsieur
12	PLR
12	Merci
7	commission
6	loi
6	cette
5	très
5	projet
5	plus
4	d'un
4	groupe
4	demande
4	qu'il
4	tout


M. Daniel Sormanni (MCG). (10 prises de parole):
11	faut
11	députés
10	Messieurs
10	Mesdames
7	comptes
7	respecter
7	cette
7	cela
6	bien
6	Genève
6	c'est
6	commission
6	Commentaires
6	plus
6	dire


M. Patrick Lussi (UDC).|M. Patrick Lussi (UDC), rapporteur de minorité.|M. Patrick Lussi (UDC), rapporteur de majorité. (22 prises de parole):
22	loi
21	projet
18	tout
17	Messieurs
16	Mesdames
14	députés
13	peutêtre
13	président
13	si
12	n'est
12	commission
11	qu'on
11	dire
11	Monsieur
11	groupe


Mme Anne Marie von Arx-Vernon (PDC). (3 prises de parole):
7	c'est
7	si
5	cette
3	Genève
3	remercie
3	faire
3	renvoyer
3	victimes
3	motion
3	démocratechrétien
3	parti


M. Pascal Spuhler (MCG).|M. Pascal Spuhler (MCG), rapporteur de minorité. (19 prises de parole):
21	Messieurs
21	Mesdames
19	président
17	Monsieur
15	cette
13	va
12	Merci
12	projet
11	MCG
10	c'est
9	commission
9	députés
9	tout
8	police
8	comme


M. Christian Frey (S).|M. Christian Frey (S), rapporteur de minorité. (11 prises de parole):
12	c'est
11	Genève
11	cela
9	moment
7	si
7	loi
7	qu'il
7	dire
7	Conseil
7	peu
7	SPC
7	aussi
7	tout
7	fait
7	projet


Mme Frédérique Perler (Ve).|Mme Frédérique Perler (Ve), rapporteuse de minorité. (10 prises de parole):
18	projet
14	c'est
12	Conseil
11	bien
10	loi
9	plus
9	tout
8	Messieurs
8	Mesdames
7	s'agit
7	congé
7	Grand
7	Comédie
7	cet
6	dire


M. André Pfeffer (UDC). (4 prises de parole):
4	policiers
4	armés
3	coût
3	projet
3	réponse


M. Thomas Wenger (S).|M. Thomas Wenger (S), rapporteur de troisième minorité.|M. Thomas Wenger (S), rapporteur de minorité.|M. Thomas Wenger (S), rapporteur de majorité. (13 prises de parole):
13	Messieurs
13	Mesdames
12	députés
11	dit
10	commission
9	projet
9	mobilité
8	mois
8	tout
7	Genève
7	qu'on
7	loi
7	bien
7	c'est
6	vraiment


M. Georges Vuillod (PLR).|M. Georges Vuillod (PLR), rapporteur ad interim. (6 prises de parole):
5	députés
5	Messieurs
5	Mesdames
4	sociale
4	renaturation
4	Merci
4	directive
3	faire
3	président
3	responsabilité
3	programme
3	afin


M. Jean Batou (EAG).|M. Jean Batou (EAG), rapporteur de deuxième minorité. (14 prises de parole):
11	bien
10	cette
9	canton
8	Genève
8	Chers
8	tout
8	collègues
7	très
7	c'est
7	plus
6	si
6	qu'il
6	quand
6	président
6	doit


M. Serge Dal Busco, conseiller d'Etat. (7 prises de parole):
8	Messieurs
8	Mesdames
6	c'est
6	députés
6	loi
6	cette
6	Conseil
6	d'Etat
5	qu'il
4	comptes
4	Cour
4	plus
4	fait
4	commission
4	manière


M. Jacques Béné (PLR), rapporteur de minorité.|M. Jacques Béné (PLR). (5 prises de parole):
8	plus
6	Messieurs
6	parlement
6	Mesdames
5	c'est
5	rapports
4	bien
4	peu
4	n'est
4	ça
3	près
3	si
3	députés
3	président
3	commission


Mme Delphine Klopfenstein Broggini (Ve).|Mme Delphine Klopfenstein Broggini (Ve), rapporteuse de deuxième minorité. (10 prises de parole):
11	projet
9	loi
9	cette
8	développement
8	l'environnement
8	deux
7	Mesdames
7	durable
7	plus
7	députés
7	Messieurs
6	très
6	président
6	aujourd'hui
5	l'agriculture


Mme Simone de Montmollin (PLR). (3 prises de parole):
6	lois
5	cette
5	tout
5	réorganisation
5	premier
4	faire
4	avoir
4	train
4	projet
3	parce
3	comme



In [20]:
# Preparation for our json: we transform the dictionary into a list of dictionaries

results_list = []

for key in deputes_paroles.keys():
    
    blob_text = str.join(' ', deputes_paroles[key])
    nb_speeches = len(deputes_paroles[key])
    if nb_speeches > 2:
        result = analyze_text(blob_text)
        
        name = key
        words = []
        
        for word, count in result[:3]:
            words.append(word)
        
        results_list.append({'name': key, 'words': words})
    
results_list


Out[20]:
[{'name': 'M. Romain de Sainte Marie', 'words': ['loi', 'projet', 'plus']},
 {'name': 'Mme Emilie Flamand-Lew', 'words': ['cette', 'loi', 'police']},
 {'name': 'M. Stéphane Florey', 'words': ['président', 'Merci', 'cette']},
 {'name': 'M. Mathias Buschbeck', 'words': ['cette', 'projet', 'loi']},
 {'name': 'M. François  Longchamp', 'words': ['loi', 'Conseil', "C'est"]},
 {'name': 'M. Michel Baud', 'words': ['caméras', "c'est", 'demande']},
 {'name': 'Mme Salika Wenger', 'words': ["c'est", 'faire', 'plus']},
 {'name': 'M. Boris Calame', 'words': ['loi', 'commission', 'Conseil']},
 {'name': 'Mme Isabelle Brunier', 'words': ['bien', 'effet', 'si']},
 {'name': 'M. Thierry Cerutti',
  'words': ['commission', 'députés', 'président']},
 {'name': 'Mme Lydia Schneider Hausser',
  'words': ['président', 'cette', 'Mesdames']},
 {'name': 'Mme Sarah Klopmann', 'words': ['président', 'cette', 'Merci']},
 {'name': 'M. Eric Leyvraz', 'words': ['loi', 'cela', "d'Etat"]},
 {'name': 'M. François Lance', 'words': ['leurs', 'plus', 'entre']},
 {'name': 'M. Jean-François Girardet',
  'words': ['Conseil', "d'Etat", 'cette']},
 {'name': 'M. Christo Ivanov', 'words': ['effet', 'Monsieur', 'président']},
 {'name': 'Mme Caroline Marti', 'words': ['rive', 'gauche', 'lac']},
 {'name': 'M. Bertrand Buchs', 'words': ['loi', 'Conseil', 'projet']},
 {'name': 'M. Luc Barthassat', 'words': ['comme', "c'est", 'tout']},
 {'name': 'M. Vincent Maitre', 'words': ['tout', 'loi', "c'est"]},
 {'name': 'M. Marc Falquet', 'words': ["c'est", 'plus', 'faut']},
 {'name': 'M. Jean-Charles Rielle',
  'words': ['patients', 'décisions', 'éclairage']},
 {'name': 'M. Yvan Zweifel', 'words': ['Genève', 'question', 'millions']},
 {'name': 'M. Olivier Cerutti', 'words': ['Messieurs', 'Mesdames', 'tout']},
 {'name': 'M. Mauro Poggia', 'words': ['faire', 'Conseil', 'Messieurs']},
 {'name': 'M. Pierre Conne', 'words': ['commission', 'cette', 'loi']},
 {'name': 'M. Bernhard Riedweg', 'words': ['traversée', 'projet', 'lac']},
 {'name': 'Mme Danièle Magnin', 'words': ['plus', "c'est", 'HUG']},
 {'name': 'Mme Marie-Thérèse Engelberts',
  'words': ["c'est", "n'est", 'faire']},
 {'name': 'Mme Magali Orsini', 'words': ['président', 'Monsieur', 'Merci']},
 {'name': 'M. Pierre Vanek', 'words': ['cette', "qu'il", 'dit']},
 {'name': 'M. Murat Julian Alder', 'words': ['projet', 'loi', 'police']},
 {'name': 'M. Frédéric Hohl', 'words': ['Messieurs', 'Mesdames', 'Genève']},
 {'name': 'Mme Nicole Valiquer Grecuccio',
  'words': ['projet', 'bien', 'fonction']},
 {'name': 'Mme Christina Meissner', 'words': ['Monsieur', 'président', 'loi']},
 {'name': 'M. Alberto Velasco', 'words': ['Monsieur', 'Genève', "c'est"]},
 {'name': 'M. Serge Hiltpold', 'words': ['plus', 'Messieurs', 'Mesdames']},
 {'name': 'M. Jean-Marc Guinchard',
  'words': ['travail', 'Messieurs', 'chers']},
 {'name': 'M. Daniel Zaugg', 'words': ['juste', 'Genève', 'places']},
 {'name': 'M. Christian Zaugg', 'words': ['lac', 'Monsieur', 'président']},
 {'name': 'Mme Jocelyne Haller', 'words': ['cette', "n'est", 'tout']},
 {'name': 'M. François Lefort', 'words': ['projet', 'cette', 'Conseil']},
 {'name': 'M. André Python', 'words': ['commission', 'groupe', 'renvoi']},
 {'name': 'M. Jean Romain', 'words': ['animaux', "c'est", 'bien']},
 {'name': 'M. Gabriel Barrillier', 'words': ['tout', 'Conseil', 'Monsieur']},
 {'name': 'M. Guy Mettan', 'words': ['tout', 'cette', 'pétition']},
 {'name': 'M. Raymond Wicky', 'words': ['tout', 'quand', 'cette']},
 {'name': 'M. Thomas Bläsi', 'words': ['très', 'tout', 'charge']},
 {'name': 'Mme Sophie Forster Carbonnier',
  'words': ['cette', 'Conseil', 'commission']},
 {'name': 'M. Cyril Mizrahi', 'words': ['Messieurs', 'Mesdames', 'cela']},
 {'name': 'M. Jean-Luc Forni', 'words': ['loi', 'prestations', 'général']},
 {'name': 'M. Roger Deneys', 'words': ['députés', 'Messieurs', 'Mesdames']},
 {'name': 'Mme Geneviève Arnold', 'words': ['bien', 'projet', 'loi']},
 {'name': 'M. Eric Stauffer', 'words': ['Monsieur', 'MCG', 'président']},
 {'name': 'M. Patrick Saudan', 'words': ['commission', 'motions', 'loi']},
 {'name': 'M. François Baertschi', 'words': ["c'est", "qu'il", 'tout']},
 {'name': 'M. Cyril Aellen', 'words': ['PLR', 'groupe', 'Genève']},
 {'name': 'M. Christophe Aumeunier', 'words': ['ans', 'zone', "l'ensemble"]},
 {'name': 'Mme Nathalie Fontanet', 'words': ['président', 'Monsieur', 'PLR']},
 {'name': 'M. Daniel Sormanni', 'words': ['faut', 'députés', 'Messieurs']},
 {'name': 'M. Patrick Lussi', 'words': ['loi', 'projet', 'tout']},
 {'name': 'Mme Anne Marie von Arx-Vernon', 'words': ["c'est", 'si', 'cette']},
 {'name': 'M. Pascal Spuhler',
  'words': ['Messieurs', 'Mesdames', 'président']},
 {'name': 'M. Christian Frey', 'words': ["c'est", 'Genève', 'cela']},
 {'name': 'Mme Frédérique Perler', 'words': ['projet', "c'est", 'Conseil']},
 {'name': 'M. André Pfeffer', 'words': ['policiers', 'armés', 'coût']},
 {'name': 'M. Thomas Wenger', 'words': ['Messieurs', 'Mesdames', 'députés']},
 {'name': 'M. Georges Vuillod', 'words': ['députés', 'Messieurs', 'Mesdames']},
 {'name': 'M. Jean Batou', 'words': ['bien', 'cette', 'canton']},
 {'name': 'M. Serge Dal Busco', 'words': ['Messieurs', 'Mesdames', "c'est"]},
 {'name': 'M. Jacques Béné', 'words': ['plus', 'Messieurs', 'parlement']},
 {'name': 'Mme Delphine Klopfenstein Broggini',
  'words': ['projet', 'loi', 'cette']},
 {'name': 'Mme Simone de Montmollin', 'words': ['lois', 'cette', 'tout']}]

In [19]:
# We generate a json file containing the nodes data

import json

data = []    

## return an array with the other nodes to connect to
def import_words(word_list):
    lines = []
    for word in word_list:
        lines.append('Title.' + word)
    return lines

def import_authors(author_list):
    lines = []
    for author in author_list:
        lines.append('Author.' + author)
    return lines

## create the node data
def generate_word(word, deputee):
    timports = []
    timports.extend(import_authors(deputee))
    
    element = {
        "name": "Title." + word,
        "size": 0,
        "imports": import_authors(deputee)
    }
    return element

def generate_author(deputee, words):
    element = {
        "name": "Author." + deputee,
        "size": 0,
        "imports": import_words(words)
    }
    return element

for item in results_list:
    deputee_name = item['name']

    for single_word in item['words']:
        data.append(generate_word(single_word, [deputee_name]))

    deputee = generate_author(deputee_name, item['words'])
    data.append(deputee)

## export
with open('microdata2.json', 'w') as outfile:
    json.dump(data, outfile, indent=4, separators=(',', ': '))

In [36]:
from IPython.core.display import display, HTML
print("Here is the result. Note: this is a work in progress -- at this time, I just use a modified D3 example!") 
display(HTML('<iframe src="http://paulronga.ch/test/dataviz.html" width="900" height="900"></iframe>'))

# alternatively: iframe version:
# from IPython.display import IFrame
# display(IFrame('http://paulronga.ch/test/dataviz.html', width=900, height=900))


Here is the result. Note: this is a work in progress -- at this time, I just use a modified D3 example!

(External content is disabled on GitHub - use this link if nothing gets displayed)